/** @brief Fichier déclarant un objet possédant un nom.
 *
 * Ce fichier contient la déclaration d'un objet permettant de gérer une
 * instance possédant un nom.
 *
 * @file ADDItemObjet.h
 * @author Johan "Solo" Luisier
 */
#ifndef ADDITEMOBJET_H
#define ADDITEMOBJET_H 1

#include "ADDObjetBase.h"

/**
 * Classe qui permet de construire un objet qui a un Nom. L'idée
 * serait d'utiliser cette classe comme base pour les classes
 * représentant les compétences martiale, et à une classe (qui aurait
 * un Prix) servant à créer les compétences et capacités.
 *
 * @author Johan "Solo" Luisier
 */
class ADDItemObjet : public ADDObjetBase
{
public:
    /** @brief Constructeur standard.
     *
     * Ce constructeur standard initialise le Nom et délègue la gestion du type
     * à la classe mère.
     *
     * @param[in] typeObjet type de l'objet.
     * @param[in] nom nom de l'item.
     */
    ADDItemObjet( const std::string& typeObjet,
                  const std::string& nom );
    /** @brief Constructeur de copie.
     *
     * Ce constructeur permet de dupliquer une instance.
     *
     * @param[in] addObj instance de ADDItemObjet à copier.
     */
    ADDItemObjet( const ADDItemObjet& addObj );
    /** @brief Destructeur, ne fait rien de spécial.
     *
     * Le destructeur est virtuel pour assurer une séquence de destructrion
     * correcte.
     */
    virtual ~ADDItemObjet();
    /** @brief Opérateur d'affectation.
     *
     * L'opérateur d'affectation permet d'assigner une instance à l'instance
     * courante.
     *
     * @param[in] item instance de ADDItemObjet à dupliquer.
     *
     * @return une référence sur l'instance courante.
     */
    ADDItemObjet& operator=( const ADDItemObjet& item );

    /** @brief Accesseur pour Nom.
     *
     * Cette méthode permet d'accéder à Nom.
     *
     * @return une référence constante sur Nom.
     */
    const std::string& nom() const;    
    /** @brief Mutateur pour Nom.
     *
     * Cette méthode permet de changer la valeur de Nom.
     *
     * @param[in] nom nouvelle valeur de Nom.
     */
    void setNom( const std::string& nom );
protected:
    /**
     * Nom de "l'item".
     */
    std::string Nom;
};

#endif // ADDITEMOBJET_H
